home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / powervww / w.cpp < prev    next >
C/C++ Source or Header  |  1998-01-05  |  48KB  |  1,420 lines

  1. //  ____________________________________________________
  2. // |                                                    |
  3. // |  Project:     POWER VIEW IDE                       |
  4. // |  File:        W.CPP                                |
  5. // |  Compiler:    WPP386 (10.6)                        |
  6. // |                                                    |
  7. // |  Subject:     Main module and PV interface         |
  8. // |                                                    |
  9. // |  Author:      Emil Dotchevski                      |
  10. // |____________________________________________________|
  11. //
  12. // E-mail: zajo@geocities.com
  13. // URL:    http://www.geocities.com/SiliconValley/Bay/3577
  14.  
  15. #define uses_ctype
  16. #define uses_stdio
  17. #define uses_string
  18.  
  19. #define uses_app
  20. #define uses_calc
  21. #define uses_comlin
  22. #define uses_desk
  23. #define uses_icons
  24. #define uses_init
  25. #define uses_editor
  26. #define uses_help
  27. #define uses_ht
  28. #define uses_stddlg
  29. #define uses_system
  30. #define uses_table
  31. #define uses_tetris
  32. #define uses_txt
  33.  
  34. #include "PVUSES.H"
  35. #include "COMPILE.H"
  36. #include "TLOG.H"
  37. #include "TPROJECT.H"
  38. #include "OPTIONS.H"
  39.  
  40. #define _DECLARE_W_H
  41.   #include "W.H"
  42. #undef  _DECLARE_W_H
  43.  
  44.  
  45. /*
  46. DEFINES
  47. */
  48.   #define MAX_CLOSED_FILES              64
  49.   #define MAX_MENU_CLOSED_FILES         9
  50.   #define MAX_CLOSED_FILE_LENGTH        25
  51.  
  52.   #define cmFILE_OPEN_CURS              0x1010
  53.   #define cmCLIPBOARD                   0x1011
  54.   #define cmCONDENSE                    0x1012
  55.   #define cmCOM_COMPILE                 0x1013
  56.   #define cmCOM_MAKE                    0x1014
  57.   #define cmCOM_BUILD                   0x1015
  58.   #define cmCOM_LINK                    0x1016
  59.   #define cmCOM_TIMECHECK               0x1017
  60.   #define cmCOM_NEXTERR                 0x1018
  61.   #define cmCOM_PREVERR                 0x1019
  62.   #define cmCOM_RUN                     0x101A
  63.   #define cmCOM_PARAMS                  0x101B
  64.   #define cmPRJ_OPEN                    0x1020
  65.   #define cmPRJ_CLOSE                   0x1021
  66.   #define cmPRJ_EXPORT                  0x1022
  67.   #define cmOPT_FAST                    0x1030
  68.   #define cmOPT_COM_CODE                0x1031
  69.   #define cmOPT_COM_ADVCODE             0x1032
  70.   #define cmOPT_COM_TARGET              0x1033
  71.   #define cmOPT_COM_SEGS                0x1034
  72.   #define cmOPT_COM_FP                  0x1035
  73.   #define cmOPT_COM_DEBUG               0x1036
  74.   #define cmOPT_COM_EXC                 0x1037
  75.   #define cmOPT_COM_OPT                 0x1038
  76.   #define cmOPT_COM_MSG                 0x1039
  77.   #define cmOPT_COM_PRE                 0x103A
  78.   #define cmOPT_COM_NAMES               0x103B
  79.   #define cmOPT_LINKER                  0x103C
  80.   #define cmOPT_EDITOR                  0x103D
  81.   #define cmOPT_DIRS                    0x103E
  82.   #define cmOPT_TOOLS                   0x103F
  83.   #define cmOPT_OPEN                    0x1040
  84.   #define cmOPT_SAVE                    0x1041
  85.   #define cmOPT_SAVE_AS                 0x1042
  86.   #define cmWIN_CALCULATOR              0x1050
  87.   #define cmWIN_TETRIS                  0x1051
  88.   #define cmWIN_PROJECT                 0x1052
  89.   #define cmWIN_LOG                     0x1053
  90.   #define cmWIN_DOS_SCREEN              0x1054
  91.   #define cmWINDOW_CLOSED_WINDOWS       0x1060
  92.   #define cmCLOSED_FILES                0x1061
  93.   #define cmTOOLS                       0x1070
  94.  
  95.  
  96. /*
  97. STRUCTS
  98. */
  99.   struct Tcmd_file
  100.   {
  101.     char *filename;
  102.     Tcmd_file *next;
  103.   };
  104.  
  105.  
  106. /*
  107. STATIC DATA
  108. */
  109.   static Tcmd_file *cmd_files=NULL;
  110.   static Tlb_list closed_files;
  111.   static char menu_titles[MAX_MENU_CLOSED_FILES][MAX_CLOSED_FILE_LENGTH+5];
  112.   static Tmenu_item *file_exit_ptr;
  113.   static Tmenu *file_menu_ptr;
  114.   static boolean disable_closed_files = 0;
  115.   static char wst_signature[] = "\r\nPower View IDE status file.\r\n\032";
  116.  
  117.  
  118. /*
  119. CONSTRUCT FILENAMES
  120. */
  121.   char *tmp_fname( char *result, char *fname )
  122.   {
  123.     char drive[_MAX_DRIVE];
  124.     char dir[_MAX_DIR];
  125.  
  126.     _splitpath( fname, drive, dir, NULL, NULL );
  127.     if( *drive || *dir )
  128.       strcpy( result, fname );
  129.     else
  130.     {
  131.       strcpy( result, default_directories.tmp_files );
  132.       strcat( result, fname );
  133.     }
  134.     return result;
  135.   }
  136.  
  137.   char *exe_fname( char *result, char *path )
  138.   {
  139.     char fname[_MAX_FNAME];
  140.     strcpy( result, default_directories.objects );
  141.     _splitpath( path, NULL, NULL, fname, NULL );
  142.     strcat( result, fname );
  143.     return result;
  144.   }
  145.  
  146.   char *exe_file( char *result, char *path )
  147.   {
  148.     return strcat( exe_fname(result,path), ".EXE" );
  149.   }
  150.  
  151.   char *obj_file( char *result, char *path )
  152.   {
  153.     char fname[_MAX_FNAME];
  154.     strcpy( result, default_directories.objects );
  155.     _splitpath( path, NULL, NULL, fname, NULL );
  156.     strcat( result, fname );
  157.     strcat( result, ".OBJ" );
  158.     return result;
  159.   }
  160.  
  161.   char *target_file( char *result, char *path )
  162.   {
  163.     char drive[_MAX_DRIVE];
  164.     char dir[_MAX_DIR];
  165.     _splitpath( path, drive, dir, NULL, NULL );
  166.     *result = 0;
  167.     if( *drive==0 && *dir==0 )
  168.       strcpy( result, default_directories.objects );
  169.     strcat( result, path );
  170.     return result;
  171.   }
  172.  
  173.  
  174. /*
  175. FILE I/O
  176. */
  177.   static void update_closed_files( void )
  178.   {
  179.     char buffer[_MAX_PATH];
  180.     if( disable_closed_files ) return;
  181.     update_menu( file_menu_ptr, file_exit_ptr );
  182.     if( closed_files.vcount ) mitem();
  183.     for( int i=0; i<closed_files.vcount && i<MAX_MENU_CLOSED_FILES; i++ )
  184.     {
  185.       Tedit_window_status *ew = (Tedit_window_status *)closed_files.getptr(i);
  186.       short_path( min_path(strcpy(buffer,ew->file_name)), MAX_CLOSED_FILE_LENGTH-1 );
  187.       sprintf( menu_titles[i], "|~%d %s", i+1, buffer );
  188.       _help( htFILE_CLOSED_FILES );
  189.       mitem( menu_titles[i], cmCLOSED_FILES+i );
  190.     }
  191.     if( closed_files.vcount )
  192.     {
  193.       _help(htWINDOW_CLOSED_WINDOWS);
  194.       mitem( "|~0 Closed windows list", cmWINDOW_CLOSED_WINDOWS );
  195.     }
  196.     update_menu( NULL, NULL );
  197.   }
  198.  
  199.   static void file_opened( Tedit_window *w )
  200.   {
  201.     if( disable_closed_files ) return;
  202.     char *fn = w->editor->text_editor->file_name;
  203.     if( *fn )
  204.       for( int i=0; i<closed_files.vcount; i++ )
  205.       {
  206.         Tedit_window_status *ew = (Tedit_window_status *)closed_files.getptr(i);
  207.         if( !strcmp(fn,ew->file_name) )
  208.         {
  209.           w->restore_status( *ew );
  210.           w->set_state( isICONIZED, 0 );
  211.           closed_files.del(i);
  212.           update_closed_files();
  213.           return;
  214.         }
  215.       }
  216.     w->resize( desktop_xl, desktop_yl - ( desktop_yl / 3 ) );
  217.   }
  218.  
  219.   static void file_closed( Tedit_window *w )
  220.   {
  221.     char *fn = w->editor->text_editor->file_name;
  222.     uint  bl = w->editor->text_editor->buf_len;
  223.     if( disable_closed_files || *fn==0 || bl==0 ) return;
  224.     Tedit_window_status ew;
  225.     w->save_status( ew );
  226.     closed_files.ins( 0, &ew );
  227.     while( closed_files.vcount>MAX_CLOSED_FILES )
  228.       closed_files.del( closed_files.vcount-1 );
  229.     update_closed_files();
  230.   }
  231.  
  232.   static boolean __editor_path = 0;
  233.   static char *search_file( char *buffer )
  234.   {
  235.     if( *buffer )
  236.     {
  237.       char filespec[_MAX_PATH], *b, *s;
  238.       char drive[_MAX_DRIVE];
  239.       char dir[_MAX_DIR];
  240.       char fname[_MAX_FNAME];
  241.       char ext[_MAX_EXT];
  242.       FILE *f = NULL;
  243.       fexpand( buffer );
  244.       add_ext( buffer, editor_options.extension );
  245.       strcpy( filespec, buffer );
  246.       f = fopen( buffer, "rb" );
  247.       if( __editor_path && f==NULL && current_editor!=NULL )
  248.       {
  249.         _splitpath( ((Tfile_editor *)current_editor->editor)->text_editor->file_name, drive, dir, NULL, NULL );
  250.         _splitpath( buffer, NULL, NULL, fname, ext );
  251.         _makepath( buffer, drive, dir, fname, ext );
  252.         f = fopen( buffer, "rb" );
  253.       }
  254.       __editor_path = 0;
  255.       for( s=b=default_directories.include; f==NULL; s++ )
  256.         if( *s==';' || *s==0 )
  257.         {
  258.           char saved = *s;
  259.           *s = 0;
  260.           _splitpath( filespec, NULL, NULL, fname, ext );
  261.           _splitpath( b, drive, dir, NULL, NULL );
  262.           _makepath( buffer, drive, dir, fname, ext );
  263.           f = fopen( buffer, "rb" );
  264.           *s = saved;
  265.